package com.julius.design.suanfa.search;

/**
 * @author julius
 * @date 2021-10-18 上午 11:52
 * <p>
 *      二分查找算法<br/>
 *          二分查找算法，每次都将搜索区域减少一半
 *          类型：
 *              非严格有序数组，查找的是范围
 *              严格有序缺失数组，以mid自身作为目标值（查找缺失数据）
 *              正常数组+指定目标值，查找所在位置，最简单的二分查找
 * </p>
 */
public class BinarySearchDemo {


    /**
     * 二分查找,首先数组是升序的
     * @param nums
     * @return
     */
    public static int binarySearch(int[] nums,int num,int start,int end){
        //临界条件
        if(nums == null || nums.length == 0 || end <= start){
            return -1;
        }
        int binary = (end+start)/2;
        if(nums[binary] == num){
            return binary;
        }
        if(nums[binary] < num){
            start = binary+1;
        }else{
            end = binary -1;
        }
        return binarySearch(nums,num,start,end);
    }


    public static void main(String[] args) {
        int[] nums = new int[]{1,2,3,4,5,6,7,8,9,10};
        int num = 0;
        System.out.println(binarySearch(nums,num,0,nums.length));
    }
}
